﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller; // Brug vores class library "Controller"
using Interfaces; // Brug vores class library "Interfaces"

namespace Sorts_F1
{
    public partial class FrmRedigerGrandPrix : Form
    {
        // Attribut
        ClsSystemController systemController;

        public FrmRedigerGrandPrix(ClsSystemController systemController) // modtager controlleren fra start formen
        {
            InitializeComponent();
            this.systemController = systemController; // Istedet for at instansiere en ny controller bruger vi den der bliver sendt med
            this.MinimumSize = this.MaximumSize = this.Size; // Sørg for at formen altid er den nuværende størrelse
        }

        private void FrmRedigerGrandPrix_Load(object sender, EventArgs e)
        {
            rbJa.Checked = false;
            OpdaterFormen();

            // Indlæs kørerne i comboboxene
            foreach (var item in systemController.VisKoerere())
            {
                cbJoker.Items.Add(item.Navn);
                cbAutoSats1.Items.Add(item.Navn);
                cbAutoSats2.Items.Add(item.Navn);
            }

            cbGPnr.SelectedIndex = 0; // Vis det første element i comboboxen
            cbJoker.SelectedIndex = 0; // Vis det første element i comboboxen
        }

        private void cbGPnr_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Når Grand Prix vælges i combobox skal dets information vises i textboxes
            foreach (var item in systemController.VisGrandPrix())
            {
                if (item.GrandPrixNummer == int.Parse(cbGPnr.Text))
                {
                    txtBane.Text = item.BaneNavn;
                    txtLand.Text = item.Land;
                    dtpDato.Text = item.GrandPrixDatoTid.ToString();
                }
            }
        }

        private void btnAendreGrandPrix_Click(object sender, EventArgs e)
        {
            try
            {
                int cbGP = int.Parse(cbGPnr.Text);
                string bane = txtBane.Text;
                DateTime dato = dtpDato.Value;
                string land = txtLand.Text;
                int joker = 0;
                bool afviklet = false;
                int autoSats1 = 0;
                int autoSats2 = 0;

                // Er løbet afviklet? (kan også afvikles ved at angive resultat på anden form)
                if (rbJa.Checked)
                {
                    afviklet = true;
                }

                // Find de kørenumre der passer til kørenavnene i comboboxene
                foreach (var item in systemController.VisKoerere())
                {
                    if ((string)cbJoker.SelectedItem == item.Navn)
                    {
                        joker = item.KoereNummer;
                    }

                    if (cbAutoSats1.Text == item.Navn)
                    {
                        autoSats1 = item.KoereNummer;
                    }

                    if (cbAutoSats2.Text == item.Navn)
                    {
                        autoSats2 = item.KoereNummer;
                    }
                }

                systemController.RedigerGrandPrixIDB(cbGP, land, bane, dato, afviklet, joker, autoSats1, autoSats2);
                systemController.OpdaterGrandPrixFraDB(); // Download de nye informationer fra databasen
                cbGPnr.Items.Clear(); // Clear listviewet for at gøre klar til de nye data
                OpdaterFormen(); // Indlæs de nye data
                cbGPnr.SelectedIndex = 0; // Vis det første element i Grand Prix comboboxen
            }

            catch
            {
                OpdaterFormen();
                MessageBox.Show("Fejl ved redigering af Grand Prix");
            }
        }

        private void btnTilbage_Click(object sender, EventArgs e)
        {
            this.Close(); // Lukker formen
        }

        public void OpdaterFormen()
        {
            lvGrandPrix.Items.Clear(); // Clear listviewet for at gøre klar til indlæsning af ny data

            // Indlæs informationer i listview og combobox
            foreach (var item in systemController.VisGrandPrix())
            {
                cbGPnr.Items.Add(item.GrandPrixNummer);

                ListViewItem lvi = new ListViewItem(); // Instansiere listview
                lvi.SubItems[0].Text = item.GrandPrixNummer.ToString();
                lvi.SubItems.Add(item.Land);
                lvi.SubItems.Add(item.BaneNavn);
                lvi.SubItems.Add(item.GrandPrixDatoTid.ToString());
                lvi.SubItems.Add(item.Afviklet.ToString());
                lvi.SubItems.Add(item.Joker.Navn.ToString());
                lvi.Tag = item.GrandPrixNummer;
                lvGrandPrix.Items.Add(lvi); // Addere subitems til listviewet
            }
        }
    }
}
